package kr.pe.johnkim.app.mobile.rest.dao;

import kr.pe.johnkim.app.domain.MyHistoryGroup;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;

import java.util.List;

/**
 * My History 그룹 관련 기능들을 구현한 클래스이다.
 * 
 * @author : johnkim <cale9797@gmail.com / Simple.ly Inc,>
 * @Date : 12. 1. 3
 */
public class MyHistoryGroupDaoImpl extends SqlMapClientDaoSupport implements MyHistoryGroupDao {
    // SLF4J Logging
	private Logger logger = LoggerFactory.getLogger(MyHistoryGroupDaoImpl.class);
    
    /**
     * My History 그룹 중복 등록을 확인 한다.
     *
     * @param myHistoryGroup
     * @return
     */
    public MyHistoryGroup checkDuplication(MyHistoryGroup myHistoryGroup) {
        logger.info("checkDuplication");
        return (MyHistoryGroup)getSqlMapClientTemplate().queryForObject("MYHISTORY_GROUP.checkDuplication", myHistoryGroup);
    }

    /**
     * 그룹을 등록 한다.
     *
     * @param myHistoryGroup
     * @return
     */
    public boolean registerGroup(MyHistoryGroup myHistoryGroup) {
        logger.info("registerGroup");

        boolean result = false;

        try {
            getSqlMapClientTemplate().insert("MYHISTORY_GROUP.registerGroup", myHistoryGroup);
            result = true;
        } catch (Exception e) {
            result = false;
        }

        return result;
    }

    /**
     * 그룹 내용을 가져 온다.
     *
     * @param myHistoryGroup
     * @return
     */
    public MyHistoryGroup selectGroup(MyHistoryGroup myHistoryGroup) {
        logger.info("selectGroup");
        return (MyHistoryGroup)getSqlMapClientTemplate().queryForObject("MYHISTORY_GROUP.selectGroup", myHistoryGroup);
    }

    /**
     * 그룹 목록을 가져 온다.
     *
     * @param myHistoryGroup
     * @return
     */
    public List<MyHistoryGroup> selectGroupList(MyHistoryGroup myHistoryGroup) {
        logger.info("selectGroupList");
        return this.getSqlMapClientTemplate().queryForList("MYHISTORY_GROUP.selectGroupList", myHistoryGroup);
    }

    /**
     * 그룹 내용을 수정 한다.
     *
     * @param myHistoryGroup
     * @return
     */
    public boolean updateGroup(MyHistoryGroup myHistoryGroup) {
        logger.info("updateGroup");

        boolean result = false;

        try {
            getSqlMapClientTemplate().update("MYHISTORY_GROUP.updateGroup", myHistoryGroup);
            result = true;
        } catch (Exception e) {
            result = false;
        }

        return result;
    }

    /**
     * 그룹을 비활성화 한다.
     *
     * @param myHistoryGroup
     * @return
     */
    public boolean updateDeactivateGroup(MyHistoryGroup myHistoryGroup) {
        logger.info("updateDeactivateGroup");

        boolean result = false;

        try {
            getSqlMapClientTemplate().update("MYHISTORY_GROUP.updateDeactivateGroup", myHistoryGroup);
            result = true;
        } catch (Exception e) {
            result = false;
        }

        return result;
    }

    /**
     * 사용자가 등록한 그룹 갯수를 가져 온다.
     *
     * @param myHistoryGroup
     * @return
     */
    public MyHistoryGroup selectGroupCount(MyHistoryGroup myHistoryGroup) {
        logger.info("selectGroupCount");
        return (MyHistoryGroup)getSqlMapClientTemplate().queryForObject("MYHISTORY_GROUP.selectGroupCount", myHistoryGroup);
    }

    /**
     * Group 목록을 등록 한다.
     *
     * @param myHistoryGroup
     * @return
     */
    @Override
    public void registerGroupList(MyHistoryGroup myHistoryGroup) {
        logger.info("registerGroupList");

//        boolean result = false;

        try {
            getSqlMapClientTemplate().insert("MYHISTORY_GROUP.registerGroupList", myHistoryGroup);

            logger.info("Success to register group list.");

//            result = true;
        } catch (Exception e) {
            logger.error("Fail to register group list.");
//            result = false;
        }

//        getSqlMapClientTemplate().insert("MYHISTORY_GROUP.registerGroupList", myHistoryGroup);

//        return result;
    }
}
